diff --git a/system/database/DB_cache.php b/system/database/DB_cache.php
index 913140f..bb2b47b 100644
--- a/system/database/DB_cache.php
+++ b/system/database/DB_cache.php
@@ -97,7 +97,7 @@
 			return $this->obj->db->cache_off();
 		}
 	
-		$uri  = ($this->obj->uri->segment(1) == FALSE) ? 'default_'	: $this->obj->uri->segment(1).'_';
+		$uri  = ($this->obj->uri->segment(1) == FALSE) ? 'default.'	: $this->obj->uri->segment(1).'.';
 		$uri .= ($this->obj->uri->segment(2) == FALSE) ? 'index'	: $this->obj->uri->segment(2);
 		
 		$filepath = $uri.'/'.md5($sql);
@@ -125,7 +125,7 @@
 			return $this->obj->db->cache_off();
 		}
 
-		$uri  = ($this->obj->uri->segment(1) == FALSE) ? 'default_'	: $this->obj->uri->segment(1).'_';
+		$uri  = ($this->obj->uri->segment(1) == FALSE) ? 'default.'	: $this->obj->uri->segment(1).'.';
 		$uri .= ($this->obj->uri->segment(2) == FALSE) ? 'index'	: $this->obj->uri->segment(2);
 		
 		$dir_path = $this->obj->db->cachedir.$uri.'/';
@@ -171,7 +171,7 @@
 			$segment_two = ($this->obj->uri->segment(2) == FALSE) ? 'index' : $this->obj->uri->segment(2);
 		}
 		
-		$dir_path = $this->obj->db->cachedir.md5($segment_one.'_'.$segment_two).'/';
+		$dir_path = $this->obj->db->cachedir.md5($segment_one.'.'.$segment_two).'/';
 		
 		delete_files($dir_path, TRUE);
 	}
diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index e8c4a82..b89ebbf 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -156,6 +156,23 @@
 		}
 	}
 	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Load the Utilities Class
+	 *
+	 * @access	public
+	 * @return	string		 
+	 */		
+	function load_utilities()
+	{
+		$obj =& get_instance();
+			
+		require_once(BASEPATH.'database/DB_utility'.EXT);
+		require_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_utility'.EXT);
+		$class = 'CI_DB_'.$this->dbdriver.'_utility';
+		$obj->dbutil = new $class();
+	}
 	
 	// --------------------------------------------------------------------
 
diff --git a/system/libraries/Controller.php b/system/libraries/Controller.php
index 2a4c195..b09be6c 100644
--- a/system/libraries/Controller.php
+++ b/system/libraries/Controller.php
@@ -434,101 +434,10 @@
 	 * @return	void
 	 */
 	function _ci_init_database($params = '', $return = FALSE, $active_record = FALSE)
-	{	
-		if ($this->_ci_is_loaded('db') == TRUE AND $return == FALSE AND $active_record == FALSE)
-		{
-			return;
-		}
-	
-		// Load the DB config file if needed.  We'll test for a DSN string
-		if (is_string($params) AND strpos($params, '://') === FALSE)
-		{
-			include(APPPATH.'config/database'.EXT);
-			
-			$group = ($params == '') ? $active_group : $params;
-			
-			if ( ! isset($db[$group]))
-			{
-				show_error('You have specified an invalid database connection group: '.$group);
-			}
-			
-			$params = $db[$group];
-		}
-		
-		// No DB specified yet?  Beat them senseless...
-		if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')
-		{
-			show_error('You have not selected a database type to connect to.');
-		}
-
-		// Load the DB classes.  Note: Since the active record class is optional
-		// we need to dynamically create a class that extends proper parent class 
-		// based on whether we're using the active record class or not.
-		// Kudos to Paul for discovering this clever use of eval()
-		
-		if ($active_record == TRUE)
-		{
-			$params['active_r'] = TRUE;
-		}
-		
-		require_once(BASEPATH.'database/DB_driver'.EXT);
-
-		if ( ! isset($params['active_r']) OR $params['active_r'] == TRUE) 
-		{
-			require_once(BASEPATH.'database/DB_active_rec'.EXT);
-			
-			if ( ! class_exists('CI_DB'))
-			{
-				eval('class CI_DB extends CI_DB_active_record { }');
-			}
-		}
-		else
-		{
-			if ( ! class_exists('CI_DB'))
-			{
-				eval('class CI_DB extends CI_DB_driver { }');
-			}
-		}
-				
-		require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver'.EXT);
-
-		// Instantiate the DB adapter
-		$driver = 'CI_DB_'.$params['dbdriver'].'_driver';
-		$DB = new $driver($params);
-		
-		if ($return === TRUE)
-		{
-			return $DB;
-		}
-		
-		$obj =& get_instance();
-		$obj->db =& $DB;
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Initialize Database Ancillary Classes
-	 *
-	 * @access	private
-	 * @param	str		class name
-	 * @return	void
-	 */
-	function _ci_init_dbextra($class)
 	{
-		if ( ! $this->_ci_is_loaded('db'))
-		{
-			$this->_ci_init_database();
-		}
-			
-		if ($class == 'dbutil')
-		{
-			require_once(BASEPATH.'database/DB_utility'.EXT);
-			require_once(BASEPATH.'database/drivers/'.$this->db->dbdriver.'/'.$this->db->dbdriver.'_utility'.EXT);
-			$class = 'CI_DB_'.$this->db->dbdriver.'_utility';
-			$this->dbutil = new $class();
-		}
-	}
+		require_once(BASEPATH.'database/DB'.EXT);
+		return DB($params, $return, $active_record);
+	}	
 
 	// --------------------------------------------------------------------
 
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index 2534e69..6809054 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -110,7 +110,9 @@
 	function database($db = '', $return = FALSE, $active_record = FALSE)
 	{
 		$obj =& get_instance();
-	
+
+		return DB($params, $return, $active_record);
+
 		if ($return === TRUE)
 		{
 			return $obj->_ci_init_database($db, TRUE, $active_record);
@@ -125,20 +127,6 @@
 	// --------------------------------------------------------------------
 	
 	/**
-	 * Database Utiliy Loader
-	 *
-	 * @access	public
-	 * @return	object
-	 */	
-	function dbutil()
-	{
-		$obj =& get_instance();
-		$obj->_ci_init_dbextra('dbutil');
-	}
-
-	// --------------------------------------------------------------------
-	
-	/**
 	 * Scaffolding Loader
 	 *
 	 * @access	public
@@ -336,7 +324,24 @@
 		
 		log_message('debug', 'Plugins loaded: '.implode(', ', $plugins));
 	}
+
+	// --------------------------------------------------------------------
 	
+	/**
+	 * Load Plugins
+	 *
+	 * This is simply an alias to the above function in case the
+	 * user has written the plural form of this function.
+	 *
+	 * @access	public
+	 * @param	array
+	 * @return	void
+	 */
+	function plugins($plugins = array())
+	{
+		$this->plugin($plugins);
+	}
+
 	// --------------------------------------------------------------------
 	
 	/**
@@ -380,24 +385,7 @@
 		
 		log_message('debug', 'Scripts loaded: '.implode(', ', $scripts));
 	}
-	
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Load Plugins
-	 *
-	 * This is simply an alias to the above function in case the
-	 * user has written the plural form of this function.
-	 *
-	 * @access	public
-	 * @param	array
-	 * @return	void
-	 */
-	function plugins($plugins = array())
-	{
-		$this->plugin($plugins);
-	}
-	
+		
 	// --------------------------------------------------------------------
 	
 	/**
